#include <QCoreApplication>
#include <iostream>
#define pi 3.14
#define days 7
#define STRLEN  10  // 字面量
#include <string>
#define MAX 10
#define MIN 1
const float PI = 3.14f;
using namespace  std;
/**
 * @brief The dept class
 * struct xxx{
 *
 * };
 * 只是定义了一个类型而已， int
 * 解决批量获得异构类型数据变量
 * typedef 类型别名
 *
 */
typedef struct ehr_djd_250226{
    int deptno;
    string dname;
    string loc;
} Dept ;


typedef struct  ehr_djd_25022601
{
    int empno;
    string ename;
    string job;
    Dept dept; // 结构体嵌套：在一个结构体中使用另一个结构体型变量
} Emp;

typedef struct xxx{
    int xno;
    Emp emp;
}XXX;
int main(int argc, char *argv[])
{
    int a =10;
    int b =20;
    // 指针里面的数据是可以改变的，指针类型的变量
    int  *  const   ip = &a; // 常量指针：不能改变指针的指向的对象；
    cout << "V:" << *ip<<endl;
    // ip =&b;

     cout << "V:" << *ip<<endl;

    // int a = 10;
    // const   int *ip  = &a; // 指针常量：不允许通过指针修改目标变量的值
    // cout << "V:" << *ip<<endl;
    // // (*ip)++;
    // // *ip=13;
    // a=20;
    // cout << "V:" << *ip<<endl;
    // cout << "AV:" << a<<endl;
    // cout << "IP:" << ip<<endl;
    // ip++;
    // cout << "IP:" << ip<<endl;

    // cout << "V:" << *ip<<endl;
    // *ip=12;
    // cout << "V:" << *ip<<endl;

    return 0;
}



int main22(int argc, char *argv[])
{
    // int  i =10;
    int *ptr = new int(10);  // 动态分配内存
    cout << ptr << endl;
    cout << *ptr <<endl;
    delete ptr;
    ptr= nullptr;
    cout << ptr << endl;
    cout << *ptr <<endl;
    // char c ='A';
    // char *cp ; // 随机的未初始化的指针；不可以使用
    // cp = &c;
    // cp = nullptr;
    // char c = 'A';
    // char *cp =  &c;

    // char *cp; //  未初始化，是一个随机数
    // cp = nullptr; //赋空 【0】
    // char  arr[]={1,2,3};
    // cp =  arr;
    // cout << cp ;
    // cp = nullptr; // 解除关系

    return 0;
}


int main21(int argc, char *argv[])
{
    int *ip;
    int arr[] ={7,9,6,2,5,1,0,3,8,4};
    // arr[0] =  arr +  0*L；
    ip =arr;
    cout << ip << "\t" << arr<<endl;
    ip++;
    cout << *ip <<endl ;
    cout << ip[9]; // 5678 + 9*sizeof(int)

    return 0;
}


int main20(int argc, char *argv[])
{
    int i =1;

    int * ip; // 5678;
    char* cp;

    ip = &i; // & 取地址运算符


    cout << ip  <<endl;
    ip++;
    cout << ip  <<endl;


    return 0;
}


int main19(int argc, char *argv[])
{
    Emp emp={
               7369,"smith","clear" ,{10,"Option","China"}

};
    XXX x1 ;
    x1.xno = 1;
    x1.emp =  emp;
    cout << emp.empno << "\t" << emp.ename <<"\t" << emp.dept.dname << endl;
    cout << x1.emp.dept.dname << endl;
    return 0;
}

int main18(int argc, char *argv[])
{
    Dept ds[]={
        {10,"Option","China"},
        {20,"Option","China"}
    }; //  声明的同时就分配内存

    const int LEN =  sizeof(ds) / sizeof(ds[0]);
    Dept d;
    for(int index = 0 ;index < LEN;index++){
        d =  ds[index]; //  结构体的克隆拷贝
        cout << d.deptno  <<  "\t" << d.dname <<"\t" << d.loc << endl;
    }
    return 0;
}



int main17(int argc, char *argv[])
{
    Dept dept = {10,"Option","China"}; // {  } 初始化方法
    cout << dept.deptno  <<  "\t" << dept.dname <<"\t" << dept.loc << endl;
    return 0;
}



// int main16(int argc, char *argv[])
// {
//     int arr[]={7,9};
//     dept d1= {10,"Option","China"}; // {  } 初始化方法
//     cout << d1.deptno  <<  "\t" << d1.dname <<"\t" << d1.loc << endl;
//     return 0;
// }


// int main15(int argc, char *argv[])
// {
//     int arr[10];
//     int  i ;
//     dept d1; // 分配内存；
//     d1.deptno =10;
//     d1.dname ="沈工大";
//     d1.loc ="中央大街";
//     cout << d1.deptno  <<  "\t" << d1.dname <<"\t" << d1.loc << endl;
//     return 0;
// }


int main14(int argc, char *argv[])
{
    int arr[10]={7,9,6,2,5,1,0,3,8,4}; //要求熟练掌握
    const int LEN = sizeof(arr) / sizeof(arr[0]);
    for(int i =0 ;i< LEN;i++){
        cout << arr[i] <<  "\t" ;
    }
    cout << "----------------------" <<endl;
    int  temp =0;
    for(int  j = 0 ;j <  LEN-1; j++){
        if(arr[j ] > arr[j+1]){
            temp =  arr[j+1];
            arr[j+1] =  arr[j];
            arr[j] = temp;
        }
    }
    for(int i =0 ;i< LEN;i++){
        cout << arr[i] <<  "\t" ;
    }
    cout << "----------------------" <<endl;
    temp =0;
    for(int  j = 0 ;j <  LEN-1-1; j++){
        if(arr[j ] > arr[j+1]){
            temp =  arr[j+1];
            arr[j+1] =  arr[j];
            arr[j] = temp;
        }
    }


    for(int i =0 ;i< LEN;i++){
        cout << arr[i] <<  "\t" ;
    }
    cout << "----------------------" <<endl;

    temp =0;
    for(int  j = 0 ;j <  LEN-1-2; j++){
        if(arr[j ] > arr[j+1]){
            temp =  arr[j+1];
            arr[j+1] =  arr[j];
            arr[j] = temp;
        }
    }


    for(int i =0 ;i< LEN;i++){
        cout << arr[i] <<  "\t" ;
    }
    cout << "----------------------" <<endl;
    return 0;
}



int main13(int argc, char *argv[])
{
    //   下标
    int arr[10]={7,9,6,2,5,1,0,3,8,4}; //要求熟练掌握
    const int LEN = sizeof(arr) / sizeof(arr[0]);
    const int last_index = LEN-1;
    const int times = LEN /2;
    cout << times;
    int temp = 0;
    for(int  index = 0 ;index < times ;     index++){
        // 0 4, 1,3
        temp = arr[index]  ;
        arr[index ] =  arr[last_index - index];
        arr[last_index - index] =  temp;
    }

    for(int i =0 ;i< LEN;i++){
        cout << arr[i] << endl;
    }
    return 0;
}


int main12(int argc, char *argv[])
{
    //   下标
    int arr[10]={7,9,6,2,5,1,0,3,8,4}; //要求熟练掌握
    const int LEN = sizeof(arr) / sizeof(arr[0]);
    int max , max_idnex, temp , j;
    j = 0 ;
    for(;j< LEN-2;j++)
    {
        max = arr[0];
        max_idnex = 0 ;
        for(int index =1; index <LEN - j  ;index++){
            if(max < arr[index]){
                max =  arr[index];
                max_idnex =  index;
            }
        }
        cout << "MAX:" << max << endl;
        cout << "max_idnex:" << max_idnex << endl;
        temp =  arr[LEN-1-j];
        arr[LEN-1-j] =  arr[max_idnex];
        arr[max_idnex] =temp;
        for(int i =0 ;i< LEN;i++){
            cout << arr[i] << endl;
        }
    }
    return 0;
}


int main11(int argc, char *argv[])
{
    //   下标
    int arr[10]={7,9,6,2,5,1,0,3,8,4}; //要求熟练掌握
    int max = arr[0];
    int max_idnex = 0 ;
    for(int index =1; index <  sizeof(arr) / sizeof(arr[0]);index++){
        if(max < arr[index]){
            max =  arr[index];
            max_idnex =  index;
        }
    }
    cout << "MAX:" << max << endl;
    cout << "max_idnex:" << max_idnex << endl;
    return 0;
}


int main10(int argc, char *argv[])
{
    int arr[20]={7,9,6,2,5,1,0,3,8,4}; //要求熟练掌握
    //
    for(int i =0 ;i< sizeof(arr)/sizeof(arr[0]) ;i++){
        cout << arr[i] << endl;
    }
    return 0;
}


int main9(int argc, char *argv[])
{
    // 解决批量获得变量的难题
    int arr[10]; // 一组物理空间相邻的变量的总称
    // 数组的每一个元素就是一个变量
    //arr[0] --- arr
    // arr[1],arr[2]。。。。
    // int i =0 ;
    // arr[i] = i;
    // i++;
    // arr[i] = i;
    // i++;
    // arr[i] = i;
    // i++;
    // arr[i] = i;
    // i++;
    // arr[i] = i;
    // i++;
    // cout <<arr[4] <<endl;

    for(int i =0 ;i< sizeof(arr)/sizeof(arr[0]) ;i++){
        arr[i] = i ;
    }

    for(int i =0 ;i< sizeof(arr)/sizeof(arr[0]) ;i++){
        cout << arr[i] << endl;
    }

    return 0;
}



int main8(int argc, char *argv[])
{
    int num =99;
    int g;
    int s;
    int b;
    int sum = 0;
    do{
        num++;
        g = num %10;
        g = g*g*g;
        // 如果
        if(g >  num){
            continue;
        }
        b = num /100;
        b = b*b*b;
        sum = g+b;
        if(sum    >  num){
            continue;
        }
        if(sum >  num){
            continue;
        }
        s =  (num /10)%10;
        s = s*s*s;
        sum += s;
        if(  sum ==  num  ){
            cout << " Value :   " << num <<endl;
        }
    }while(num <1000);
    return 0;
}



int main7(int argc, char *argv[])
{
    int result = 8;
    int times = 0;
    int r = 0 ;
    do{
        cout << "Input: " << endl;
        cin >> r;
        times++;
        if(  r ==  result ){
            cout <<  "gotted"<<endl;
            cout<< "times:" << times << endl;
        }else {
            if( (r> MAX)||(r <MIN) ) // 自定向下，逐步求精
            {
                cout << "SCOPE:" << MIN << ":" << MAX <<endl;
            }
            if(  r >  result ){
                cout <<  "too G"<<endl;
            }else{
                cout <<  "too L"<<endl;
            }
        }
    }while( r !=  result);

}


int main6(int argc, char *argv[])
{
    int  sum = 0 ;
    int i   = 0 ;
    int times = 0 ;
    // 两个问题
    // 循环体
    // 次数控制
    // while(times <5 )
    // {
    //     times++;
    //     i++;
    //     sum+=i;
    // }
    // i++;
    // sum+=i;
    // i++;
    // sum+=i ;
    // i++;
    // sum+=i ;
    // i++;
    // sum+=i ;
    cout << "sum :" <<  sum  << endl;
    // 相同代码不写两遍 --- > 开发成本
    return 0;
}


// 比赛  奖金、奖杯和证书； 奖杯和证书； 证书；
int main5(int argc, char *argv[])
{
    int g =4;
    /**
     * 入口
     * case default,优先匹配case ，然后是default，与位置无关
     * 出口
     * break
     *  }
     */
    switch(g){
    default:
        cout << "A" << endl;
    case 1 :
        cout <<"B" <<endl;
    case 2 :
        cout <<"C" <<endl;
    case 3 :
        cout <<"D"  <<endl;
    }
    return 0;
}



int main4(){
    char g = 'A';
    switch(g){
    case  'A' :
        cout <<"9" << endl;
        break;
    case  'B' :
        cout <<"0.9";
        break;
    default:
        cout << "0";
    }

    // if(g =='A'){

        // }else if(g=='B'){

        // }else if(g=='C'){

    // }
    return 1;
}


int main3(){
    int a  =1;
    int b = 2;
    // int c  = ( (a >  b ) )? (a)  : (b)  ; // 三目三个表达式
    a = a>b ? a :b;
    // if(a >  b ){
    //     c =a;
    // }else{
    //     c = b;
    // }
    cout <<"OK: " << a  << endl;
    return 1;
}


int main2(){
    int a =99;
    int b =98;
    int c =101;
    int max = 0 ;
    if( a > b  ){
        max = a;
    }else{
        max =b;
    }
    if(max < c )
        max =c;
    cout << "OK:"  <<  max << endl;
    return 1;
}




/**
 * @brief fun 函数的功能说明
 * @param x: 参数说明
 * @param y:参数说明
 * @return 返回值说明
 */
int  fun(int x, int y){
    int temp   ;
    if(x > y){
        temp = x ;
    }else {
        temp = y ;
    }
    return temp;
}


int main1(){
    cout << "输入分数" << endl;
    short score;
    cin >>  score;
    if(score >=90){
        cout << "A";
    }else
        if( score >=80 )
        {
            cout <<"B";
        }else
            if(score >=70){
                cout <<"C";
            }
            else
                if(score >=60){
                    cout <<"D";
                }
                else {
                    cout << "E";
                }
    // if(score > 600){
    //     cout << 11111<<endl;
    // }
    // else if(score >500){
    //     cout << 2222<<endl;
    // }
    // else if(score >400){
    //     cout << 3333<<endl;
    // }
    // else{
    //     cout << 4444 <<endl;
    // }

    return 0 ;
}

int main0(int argc, char *argv[])
{
    int x =0;
    if(x == 1){
        cout<< "1111";
    }
    // bool b = true;
    // b =  !b;
    // b = !b;
    // cout << b <<endl;
    // 1010
    // int x = 0x0A;
    // int y = 0x07;    // 0111 ,位置零运算用位与，位置一运算用位或
    // int z =  x & y ;
    // cout << z << endl;
    // X1XX
    // int x =  0x0A;
    // int z =  x |  4;// 0100;
    // cout << z;
    /*
    int x =  0xF0;
    int y = 0x0f;
    int z =  x & y ;
    cout << z <<endl;*/
    // bool b1 = true;
    // bool b2 =false;
    // // bool z =  b1 || b2;
    // // cout << z << endl;
    // // cout <<  !z;
    // bool z =  b1 & b2;
    // cout << z;

    // int x= 0;
    // cin >>  x;

    // cout << x << endl;
    /* int x =10;
    x =11;
    x = x +1;   */// x++； x+=1; x= x+1;
    // int x =10;
    // // int z =  ++x + ++ x + ++x;
    // int z =  ++x + x++ + x++;
    // cout <<z<<endl;
    // int x = 10;
    // int z =  x++ +  x++;
    // cout << z<< endl;
    // int i =2;
    // int j =1;
    // int z =  j/i;
    // cout << z;
    // // 异常处理
    // cout << "OK";
    // int x = 10;
    // int y = 0 ;
    // y =  (++x) + (++x) + (++x);
    // cout <<"Y="  <<  y <<endl ;

    // //整型输入
    // int a = 99;
    // cout << "请输入整型变量：" << endl;
    // cin >> a;
    // cout << a << endl;
    /*
    int x, y;
    x = 0 ;
    cout << "X:" << endl ;
    cin >> x;
    cout << x  <<  endl;*/
    // bool b =  99; // 1 ,  0
    // cout << b  <<endl; //  bit
    // // string s ="ok"; // API
    // // s.append("x");


    // cout << s.capacity()  << endl;
    // char cs[STRLEN] ; -1 \0
    // for(int i =0;i<  STRLEN;i++){
    //     cs[0] = '\0';
    // }
    // cs[0]= 49;
    // // cout << cs <<endl;
    // printf("%s",cs);

    // char str1[] = "hello world";// 编译器

    // cout << "D:\\Dev\\QT\\b\\a\\t";
    // 0 - >48
    //  --->32
    // A -->65
    // unsigned char c = 127;
    // c++;
    // int i = c;
    // cout <<     i <<  endl;
    // char c = 127; // 补码表示法
    // c++;
    // int i =  c;
    // cout << i  << endl;
    // char c ='A'; // gb2312 , utf-8
    // cout << sizeof(char) << endl;

    // float f = 3.333333f; // 浮点数的计算错误
    // f = f*3;
    // cout << f <<endl;
    // float f = 3.14f; // 默认是double
    // cout << f <<endl;
    // int  is[]={1,2,3,4};
    // cout << sizeof(is) / sizeof(is[0]);
    // //QString  s ="段";
    // //cout << "short 类型所占内存空间为： " << sizeof(s) << endl;
    // cout << "short 类型所占内存空间为： " << sizeof(short) << endl;
    // cout << "int 类型所占内存空间为： " << sizeof(int) << endl;
    // cout << "long 类型所占内存空间为： " << sizeof(long) << endl;
    // cout << "long long 类型所占内存空间为： " << sizeof(long long) << endl;
    // // cout <<  days << endl;
    // // const  int m =12;
    // // cout << m <<  endl;
    // // cout << m <<  endl;

    /*
1、申请内存单元
2、别名 x  --->0xAB
3、size： 4字节
4、初始化
*/
    /*
     * 栈中
     */
    // int  x =1;
    // cout << x << endl;
    // cout << pi << endl;
}
